
#ifndef SIM_MC_HEADER
#define SIM_MC_HEADER

#include "dlinkedlist.h"

DLNODE(DLNode, double);
DLLIST(DLList, DLNode);

#define DPARAM_CREATE(name, dp, value, offset) \
dp = malloc(sizeof(name)*offset); \
for (value=0; value<offset; value++) { \
    dp[value].param = dll_sim_newlist(); \
} \
value=0;

typedef struct dist_param dparam;

struct dist_param {
    char *nameid[5];
    DLList *param;
};

double expd_sample(double lambda);
double wbd_sample(double lambda, double k);
double logn_sample(double mu, double sigma);

void sim_mc(const int nsim, double seed, double *S, const int n_S, double *E, const int n_E, double *ES, double *p, dparam *dp, double *C, int *path);

#endif
